/* 
 * EntityConverter.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.converter;

import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import br.com.pma.entity.IEntity;

/**
 * Converter para as entidades do sistema.
 * 
 * @author Ludemeula Fernandes de Sá
 */
@FacesConverter(value = "entityConverter", forClass = IEntity.class)
public class EntityConverter implements Converter {

	/**
	 * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
	 *      javax.faces.component.UIComponent, java.lang.String)
	 */
	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null) {
			return this.getAttributesFrom(component).get(value);
		}
		return null;
	}

	/**
	 * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
	 *      javax.faces.component.UIComponent, java.lang.Object)
	 */
	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value != null && !"".equals(value) && !"0".equals(value)) {
			IEntity entity = (IEntity) value;

			if (entity.getId() != null) {
				this.addAttribute(component, entity);
				return String.valueOf(entity.getId());
			} else {
				this.addAttribute(component, entity);
				return value.toString();
			}
		}
		return "";
	}

	private void addAttribute(UIComponent component, IEntity o) {
		if (o.getId() != null) {
			this.getAttributesFrom(component).put(o.getId().toString(), o);
		} else {
			this.getAttributesFrom(component).put(o.toString(), o);
		}
	}

	private Map<String, Object> getAttributesFrom(UIComponent component) {
		return component.getAttributes();
	}
}